package org.andengine.shmup;

import org.anddev.andengine.opengl.texture.region.TextureRegion;
import org.anddev.andengine.util.pool.GenericPool;

public class SpritePool extends GenericPool<Laser> {

	// ===========================================================
	// Constants
	// ===========================================================

	// ===========================================================
	// Fields
	// ===========================================================
	
	private TextureRegion laserSprite;

	// ===========================================================
	// Constructors
	// ===========================================================
	
	SpritePool(TextureRegion laserSprite){
		this.laserSprite = laserSprite;
		this.batchAllocatePoolItems(100);
	}
	
	// ===========================================================
	// Getter & Setter
	// ===========================================================

	// ===========================================================
	// Methods for/from SuperClass/Interfaces
	// ===========================================================
	
	//Called When a new sprite is needed 
	@Override
	protected Laser onAllocatePoolItem() {
		return new Laser(800, 800, laserSprite);
	}
	
	//Called when a sprite is sent to the pool
	@Override
	protected void onHandleRecycleItem(final Laser laser){
		if(this.getUnrecycledCount() < 2) {
            laser.setPosition(800, 800);
            laser.setMode(0);
            laser.setAngle(0);
            laser.deactivate();
            //laser.getParent().detachChild(laser);
            //laser.getParent().unregisterUpdateHandler(laser.get)
		}
	}
	
	//Called just before it is sent to the caller
	@Override
	protected void onHandleObtainItem(final Laser laser) {
	        //laser.reset();
			laser.activate();
	}

	// ===========================================================
	// Methods
	// ===========================================================

	// ===========================================================
	// Inner and Anonymous Classes
	// ===========================================================
}
